package com.psdi.element;

/**
 * 位置类
 * 用于表示游戏中的位置坐标
 * 包含 x, y, z 三个坐标轴
 * 提供了位置解析、向量移动和距离计算等方法
 */
public class Position {
    public float x;
    public float y;
    public float z;

    public Position() {
    }

    public Position(float x, float y) {
        this.x = x;
        this.y = y;
        this.z = 0f; // 默认z轴位置为0
    }

    public Position(float x, float y, float z) {
        this.x = x;
        this.y = y;
        this.z = z;
    }

    /**
     * 将给定的字符串解析为 Position 对象。
     * 输入应该是 "x,y" 或 "x,y,z", 且 x, y, 和 z 都是int类型.
     *
     * @param position 一个字符串，格式为 "x,y" 或 "x,y,z"，其中 x, y, 和 z 是整数。
     * @return 一个 Position 对象，包含解析后的 x, y, 和 z 值。
     * @throws IllegalArgumentException 如果输入字符串格式不正确，将抛出此异常。
     */
    public static Position parsePosition(String position) {
        String[] parts = position.split(",");
        if (parts.length == 2) {
            return new Position(Integer.parseInt(parts[0]), Integer.parseInt(parts[1]));
        } else if (parts.length == 3) {
            return new Position(Integer.parseInt(parts[0]), Integer.parseInt(parts[1]), Integer.parseInt(parts[2]));
        } else {
            throw new IllegalArgumentException("Invalid position format: " + position);
        }
    }

    /**
     * 将当前位置向向量方向移动
     * @param vector2D 一个 Vector2D 对象
     */
    public void add(Vector2D vector2D) {
        this.x += vector2D.x;
        this.y += vector2D.y;
    }

    public static double distance(Position p1, Position p2) {
        double dx = p1.x - p2.x;
        double dy = p1.y - p2.y;
        double dz = p1.z - p2.z; // 考虑 z 轴的距离
        return Math.sqrt(dx * dx + dy * dy + dz * dz);
    }

    @Override
    public String toString() {
        return "x="+x + ",y="+y + ",z=" + z;
    }
}
